package cn.ahpu.main;

import java.util.Scanner;
import java.util.Stack;

import cn.ahpu.tools.FileOperation;
import cn.ahpu.tools.Operations;
import cn.ahpu.tools.Rand;

public class Compute {
	/**
	 * 随机生成题目
	 * 先随机生成看需要几个字符，为奇数，且大于3
	 * +、-、*、/对应0、1、2、3
	 * 运算数字在0-100（不包含100）
	 * v1.02
	 * 实现基本功能
	 * v1.03
	 * 完成随机生成四则运算式子的结果运算
	 * v1.04
	 * 增加校验，使不符合要求的式子不能出现
	 * 如负数，分数，同时要求至少要有两种运算符
	 * v1.05
	 * 基本功能完成
	 */
	public String compute() {
		/*数字栈*/
		Stack<Integer> number = new Stack<>();
		/*符号栈*/
		Stack<Integer> operation = new Stack<>();

		//先看生成几位字符的运算式
		int len = Rand.rand_5_12();
		//奇数位写数字，偶数位写字符
		String str = "";

		//
		int o;
		//记录结果
		while(len!=0) {
			if(len%2==1) {
				//为奇数，写数字
				int num = Rand.rand_0_100();
				str += num;
				//将数字压入数字栈
				number.push(num);
				//如果此时字符栈有字符，判断，若为*、/，就将这一次的数字与上一个的数字进行运算
				if(!operation.isEmpty()) {
					int n = operation.peek();
					if(Operations.judgeOperationChar(n)) {
						//是*、/
						int r = Operations.operate(number.pop(), number.pop(), n);
						//将结果压入数字栈中上一位数字所在地,同时字符栈出栈
						number.push(r);
						operation.pop();
					}
				}
			}else if(len!=1){
				//为偶数，写符号
				int num = Rand.rand_0_4();
				//校验运算符，使其至少有俩种运算符
				char c = Operations.intToOperationChar(num);
				str += c;
				//将字符压入字符栈
				operation.push(num);
			}
			len--;
		}

		//最后如果字符栈不为空，说明计算还没有结束，开始出栈，并将最后两个数字做运算
		int result = number.pop();
		while(!operation.isEmpty()) {
			result = Operations.operate(result, number.pop(), operation.pop());
		}
		//		System.out.println(str+"="+result);
		str+="="+result;
		return str;
	}

	public static void main(String[] args) {
		Scanner sc = new Scanner(System.in);
		System.out.println("请输入你的学号:");
		String id = sc.nextLine();
		System.out.println("请输入你要做的题目数量:");
		int num = sc.nextInt();
		//存储算式的数组
		String[] equ = new String[num];
		int count = 0;
		//保存答案算式的文件名
		String fileName = "result.txt";

		while(num--!=0) {
			Compute c = new Compute();
			String str = c.compute();
			String[] s = str.split("=");
//			System.out.println(Arrays.toString(s));
			String equation = s[0];
			String result = s[1];
			if(Integer.valueOf(result)<0) {
				num++;
				//System.out.println(equation+"="+result);
			}else {
				//存入对应的文件result.txt中
				equ[count++] = str;
			}
		}
		sc.close();
		
		FileOperation.wireFile(fileName,id,equ);
		FileOperation.readFile(fileName);
	}
}
